/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package system;

import org.eclipse.emf.common.util.EList;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Entity</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link system.Entity#getAttributes <em>Attributes</em>}</li>
 *   <li>{@link system.Entity#getSuperType <em>Super Type</em>}</li>
 *   <li>{@link system.Entity#getReferences <em>References</em>}</li>
 *   <li>{@link system.Entity#getTable <em>Table</em>}</li>
 *   <li>{@link system.Entity#getNamedQueries <em>Named Queries</em>}</li>
 * </ul>
 * </p>
 *
 * @see system.SystemPackage#getEntity()
 * @model annotation="http://www.eclipse.org/emf/2002/Ecore constraints='ReservedNames UniqueAttributes IsolatedEntity'"
 *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL UniqueAttributes='self.attributes->forAll(a1 : Attribute, a2 : Attribute | a1 <> a2 implies a1.name <> a2.name)' IsolatedEntity='(Reference.allInstances()->exists(r:Reference| r.referencedEntity = self))\r\nand\r\n(\r\n\t(Method.allInstances()->exists(m:Method| m.returnType = self))\r\n\tor\r\n\t(Parameter.allInstances()->exists(p:Parameter | p.type = self))\r\n)\r\n' ReservedNames='not ((Set{\'abstract\', \'continue\', \'for\', \'new\', \'switch\', \'assert\', \'default\', \'goto\',\r\n \'package\', \'synchronized\', \'boolean\', \'do\', \'if\', \'private\', \'this\', \'break\', \'double\', \'implements\', \'protected\', \'throw\', \'byte\',\r\n  \'else\', \'import\', \'public\', \'throws\', \'case\', \'enum\', \'instanceof\', \'return\', \'transient\', \'catch\', \'extends\', \'int\', \'short\', \'try\', \'char\',\r\n   \'final\', \'interface\', \'static\', \'void\', \'class\', \'finally\', \'long\', \'strictfp\', \'volatile\', \'const\', \'float\', \'native\', \'super\', \r\n\t\'while\',\'true\',\'false\',\'null\'})->includes(self.name))\r\n'"
 * @generated
 */
public interface Entity extends Type {
	/**
	 * Returns the value of the '<em><b>Attributes</b></em>' containment reference list.
	 * The list contents are of type {@link system.Attribute}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Attributes</em>' containment reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Attributes</em>' containment reference list.
	 * @see system.SystemPackage#getEntity_Attributes()
	 * @model containment="true"
	 * @generated
	 */
	EList<Attribute> getAttributes();

	/**
	 * Returns the value of the '<em><b>Super Type</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Super Type</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Super Type</em>' reference.
	 * @see #setSuperType(Entity)
	 * @see system.SystemPackage#getEntity_SuperType()
	 * @model
	 * @generated
	 */
	Entity getSuperType();

	/**
	 * Sets the value of the '{@link system.Entity#getSuperType <em>Super Type</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Super Type</em>' reference.
	 * @see #getSuperType()
	 * @generated
	 */
	void setSuperType(Entity value);

	/**
	 * Returns the value of the '<em><b>References</b></em>' containment reference list.
	 * The list contents are of type {@link system.Reference}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>References</em>' containment reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>References</em>' containment reference list.
	 * @see system.SystemPackage#getEntity_References()
	 * @model containment="true"
	 * @generated
	 */
	EList<Reference> getReferences();

	/**
	 * Returns the value of the '<em><b>Table</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Table</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Table</em>' attribute.
	 * @see #setTable(String)
	 * @see system.SystemPackage#getEntity_Table()
	 * @model
	 * @generated
	 */
	String getTable();

	/**
	 * Sets the value of the '{@link system.Entity#getTable <em>Table</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Table</em>' attribute.
	 * @see #getTable()
	 * @generated
	 */
	void setTable(String value);

	/**
	 * Returns the value of the '<em><b>Named Queries</b></em>' containment reference list.
	 * The list contents are of type {@link system.NamedQuery}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Named Queries</em>' containment reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Named Queries</em>' containment reference list.
	 * @see system.SystemPackage#getEntity_NamedQueries()
	 * @model containment="true"
	 * @generated
	 */
	EList<NamedQuery> getNamedQueries();

} // Entity
